草庐IT

Android ArrayList迭代

全部标签

C++ 二进制文件和迭代器 : getting away with a 1:1 using ifstreambuf_iterator?

Thisanswer指出C++不太适合二进制文件的迭代这一事实,但这是我现在需要的,简而言之,我需要以“二进制”方式对文件进行操作,是的,所有文件都是二进制的,即使是.txt的,但我正在写一些对图像文件进行操作的东西,所以我需要读取结构良好的文件,数据是否以特定方式排列。我想读取数据结构中的整个文件,例如std::vector所以我几乎可以立即关闭文件并处理内存中的内容,而无需再关心磁盘I/O。目前,根据标准库对文件执行完整迭代的最佳方法是std::ifstreamifs(filename,std::ios::binary);for(std::istreambuf_iterator>i

c++ - 反转按需迭代器

我有一个迭代器DataIterator,它按需生成值,因此取消引用运算符返回一个Data,而不是Data&。我认为这是一件好事,直到我尝试通过将数据包装在reverse_iterator中来反转数据DataIterator。DataCollectioncollectionstd::reverse_iteratorrBegin(iter)//iterisaDataIteratorthat'spart-waythroughthecollectionstd::reverse_iteratorrEnd(collection.cbegin());autoFound=std::find_if(rB

c++ - 迭代器要求明显不一致

我正在实现一些类型特征/概念类,以检查传递给泛型函数的类型是否满足迭代器类型的编译时要求(如标准中所定义,从24.2.2开始)。问题是基本的迭代器要求(表106)是*r的类型(其中r是对类型T的迭代器的引用)是std::iterator_traits::reference.但是,如果我们考虑一个输出迭代器,例如std::ostream_iterator,http://en.cppreference.com/w/cpp/iterator/ostream_iterator我们可以看到在这种情况下reference类型是void,而operator*()迭代器类型返回std::ostream

c++ - 模拟数组的随机迭代

我有一个给定大小的数组。我想以伪随机顺序遍历它,保持数组完整并访问每个元素一次。如果当前状态可以存储在几个整数中,那将是最好的。我知道youcan'thavefullrandomnesswithoutstoringfullarray,但我不需要真正随机的顺序。我需要它被用户认为是随机的。解决方案应该使用次线性空间。一个可能的建议——使用大质数——是givenhere.这个解决方案的问题是有一个明显的固定步骤(采用模块数组大小)。我更喜欢一个不是那么明显非随机的解决方案。有更好的解决方案吗? 最佳答案 这个算法怎么样?伪伪随机遍历一个

c++ - 迭代方向枚举

我有一个方向枚举,其中包含6个方向条目(N、NE、SE、S、SW、NW),它们基本上是图中节点的边。我经常需要遍历所有邻居,目前仅使用int从0->5进行迭代。有时还需要从例如迭代2->1环绕,目前通过从2->2+5迭代并在使用时取模6来完成。有什么我可以做的,可以在不损失性能的情况下使它更安全/更容易使用吗?具有固定整数范围的for循环可以展开、内联等。基于vector的方法不能(在枚举中使用静态常量vector)我已经在这样的方案中有了枚举:structDirection{enumType{N,NE,...}unsignedCOUNT=...;Typet_;operatorType

c++ - 如何迭代所有 malloc block (glibc)

我正在尝试迭代所有领域中的所有malloc_chunk。(基于核心文件调试,内存泄漏和内存损坏排查)据我所知,每个竞技场都有top_chunk,它指向一个竞技场内的顶部block,基于top_chunk,其中有prev_size和size,基于代码(glibc/malloc/malloc.c):我可以获取之前的连续block,然后在一个竞技场中循环所有block。(我可以统计block的大小和数量,就像WinDBG一样:!heap-stat-h)并且还基于prev_size和size,我可以检查block是否损坏。arena(malloc_state)中有一个成员变量:next,指向下

c++ - 迭代时从 STL 容器中查找并删除元素

在遍历multimap时我想删除元素,但不仅仅是迭代器指向的元素。for(vectormyVec:myVectors){autorange=myMultiMap.equal_range(myVector);for(autoit=range.first;it!=range.second;++it){//secondPairisanotherelementofthismultimapautosecondPair=getSecondPair(it,myMultiMap);if(condition){it=myMultiMap.erase(it);autofinder=myMultiMap.f

c++ - valgrind 疯了还是这是真正的 std 映射迭代器内存泄漏?

嗯,总的来说,我对Valgrind和内存泄漏分析器还很陌生。而且我必须说,当您开始使用它们时有点害怕,因为您无法停止想知道之前可能有多少漏洞未解决!就这一点而言,由于我不是经验丰富的C++程序员,我想检查这是否肯定是内存泄漏,还是Valgrind正在误报?typedefstd::vectorVector;typedefstd::vectorVectorVector;typedefstd::mapMapVector;typedefstd::pairPairVector;typedefstd::map::iteratorIteratorVector;VectorVectorvv;MapVe

c++ - 如何调整集合迭代器使其表现得像 map 迭代器?

我有一个类Foo包含map并提供begin()和end()迭代它的函数:classFoo{typedefstd::mapContainer;typedefContainer::const_iteratorconst_iterator;Containerc_;public:const_iteratorbegin()const{returnc_.begin();}const_iteratorend()const{returnc_.end();}voidinsert(inti,doubled){c_[i]=d;}//...};现在我想在内部从std::map更改它只是一个std::set,但

c++ - vector<bool> 如何处理引用和迭代器?

我们可能都知道C++98vector特化将boolean值存储为位而不是boolean变量。vector的元素不可寻址,因为C++没有指针和对位的引用,是否有解决此问题的方法,任何明显的陷阱(我似乎没有注意到)并且它是否实用甚至尝试这样做? 最佳答案 vector的元素与任何其他元素一样可寻址vector的元素,例如与operator[].但是,由于内存压缩,操作会变慢。也许更快的实现将使用您自己的内存实现并使用二进制移位来处理特定的boolean值。另一种方法是在适当的地方使用简单数组。请记住,您可以使用new动态分配它运营商。编